#include "ledplus.h"

//1.对要操作的外设进行初始化
void ledInit(){
	//1.给时钟信号
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	
	//2.GPIO  PA0-PA7 进行初始化
	GPIO_InitTypeDef initDef;
	initDef.GPIO_Mode=GPIO_Mode_Out_PP;
	initDef.GPIO_Speed=GPIO_Speed_50MHz;
	initDef.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;	
	GPIO_Init(GPIOA,&initDef);
	
	//默认先把所有的GPIO口关闭
	GPIO_SetBits(GPIOA,GPIO_Pin_0);
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
	GPIO_SetBits(GPIOA,GPIO_Pin_2);
	GPIO_SetBits(GPIOA,GPIO_Pin_3);
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
	GPIO_SetBits(GPIOA,GPIO_Pin_5);
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	GPIO_SetBits(GPIOA,GPIO_Pin_7);


}


//4.跑马灯效果
/*
	第一次循环
	1<<i     1<<0    u8 = 0000 0001   ~  1111 1110  点亮第1颗灯
	1<<i     1<<1    u8 = 0000 0010   ~  1111 1101 	点亮第2颗灯
	1<<i     1<<2    u8 = 0000 0100   ~  1111 1011	点亮第3颗灯
	1<<i     1<<3    u8 = 0000 1000   ~  1111 0111 	点亮第4颗灯
  

`
	处理u8数据 根据0所在的位置  点亮关闭LED灯
	
	
	1.循环8次  因为有8个bit位
	2.判断最低位是0/1    data&0x01    
	3.如果最低位是1 关闭LED灯    如果最低位是0 打开LED灯
	4.每处理一个bit位就应该丢弃一个bit位  data>>=1
	
	
	

*/
//  							u8 data= 1111 1101
void ledWriteData(u8 data){
	u8 i;
	for(i=0;i<8;i++){
		//第一次循环 i=0    第二次循环  i=1
		// 1111 1101 & 0x01 = 1     0111 1110 & 0x01 =0
		if(data&0x01){
			GPIO_WriteBit(GPIOA,GPIO_Pin_0<<i,Bit_SET); //第一次循环 关闭第一个LED灯
		}else{
			GPIO_WriteBit(GPIOA,GPIO_Pin_0<<i,Bit_RESET);//第二次循环  打开第二个LED灯
		}	
		data>>=1; //u8 data= 0111 1110    data= 0011 1111 
		
	}

}
